//模拟 - 数青蛙
//思路: 
//1.遇到'c', 'k'为0, 'c'++, 'k'不为0, 'k'--, 'c'++
//2.遇到其他, 判断前驱, 前驱不为0, 前驱--, 当前++, 前驱为0, 返回-1
//最后遍历哈希表, 如果r/o/a/k不为0, 返回-1; 返回hash[k]的个数
class Solution {
public:
    int minNumberOfFrogs(string croakOfFrogs) {
        string t = "croak";
        int n = t.size();
        vector<int> hash(n); //数组模拟哈希表, [下标, 下标字符个数]

        unordered_map<char, int> index; //[字符-下标]
        for(int i = 0; i < n; i++)
            index[t[i]] = i;

        for(auto ch : croakOfFrogs)
        {
            if(ch == 'c')
            {
                if(hash[n - 1]) hash[n - 1]--;
                hash[0]++;
            } 
            else
            {
                int i = index[ch];
                if(hash[i - 1] == 0) return -1;
                hash[i - 1]--, hash[i]++;
            }
        } 
        for(int i = 0; i < n - 1; i++)
            if(hash[i]) return -1;
        return hash[n - 1];
    }
};